#include <fstream>
#include <iostream>
#include <vector>
// #include <map>
#include <stdlib.h>
#include <memory.h>
#include <string>
using namespace std;

struct time_P_Q
{
	char tt[6];
	float p;
	float q;
};

int char_proc(const char* ,time_P_Q&);
int find_max(float *,int);
int find_min(float *,int);

int main()
{
        const char file_name[]="scada.txt";
        ifstream in_file;
	time_P_Q tpq;

//	string out_txt_temp;
//	char out_txt[64];
	char out_txt[4096];
//	char first_txt[64];
	int retcode;
	int tt(0);

	vector <time_P_Q> temp_date;
//	map <int,float> temp_seq;

	if (!temp_date.empty())
		temp_date.clear();
	in_file.open(file_name);
	if (in_file.is_open())
	{
		while (in_file.good())
		{
		     in_file>>out_txt;
		//    memset(out_txt,0,64);
		//    memcpy(out_txt,&out_txt_temp,64);
		    retcode= char_proc(out_txt,tpq);
//		    if (*tpq->tt='0'||*tpq->tt='1'||*tpq->tt='2')
		    if ('0'==tpq.tt[0]||'1'==tpq.tt[0]||'2'==tpq.tt[0])
		    temp_date.push_back(tpq);
		    else
		    break;

		}
	}	
	else
		cerr<<"Error when open file :"<<file_name;
	in_file.close();
	float *temp_seq= new float[temp_date.size()]; 
	float sum(0.0);
	for (int i=0;i<temp_date.size();i++)
	{
		temp_seq[i]=temp_date[i].p;
		sum+=temp_date[i].p;
	}
	tt=find_max(temp_seq,temp_date.size());
	// tt=find_max(&temp_seq[0],temp_seq.size());
	cout<<"最大有功"<<temp_date[tt].tt<<'='<<temp_date[tt].p<<endl;
	tt=find_min(temp_seq,temp_date.size());
	cout<<"最小有功"<<temp_date[tt].tt<<'='<<temp_date[tt].p<<endl;
	cout<< "平均值" << sum/temp_date.size()<<endl;
	sum=0.0;
	for (int i=0;i<temp_date.size();i++)
	{
		temp_seq[i]=temp_date[i].q;
		sum+=temp_date[i].q;		
	}

//	tt=find_min(temp_seq,temp_date.size);
	tt=find_max(temp_seq,temp_date.size());
	cout<<"最大无功"<<temp_date[tt].tt<<'='<<temp_date[tt].q<<endl;
	tt=find_min(temp_seq,temp_date.size());
	cout<<"最小无功"<<temp_date[tt].tt<<'='<<temp_date[tt].q<<endl;
	cout<< "平均值" << sum/temp_date.size()<<endl;

	delete temp_seq;
	return 0;
}


int char_proc(const char* test,time_P_Q& tpq)	// & stands reference ,means the value can be modify in sub-fuction
{
	int size(0);
	char temp[6];
	memset(temp,0,6);
	while (*test!='/0')
	{
		test++;
		if (','==*test)
		{
		    while(*++test!=',') 
			//*temp++=*test;
			size++;
			//tpq.tt=temp;
			memcpy(tpq.tt,(test-size),size);
			size =0;
		    while(*++test!=',') 
			size++;
			memcpy(temp,(test-size),size);
		//	*(temp++) =*(test);
			size=0;
			tpq.p=atof(temp);
		    while(*++test!=',')
		//	*(temp++) =*(test);
			size++;
			memset(temp,0,6);
			memcpy(temp,(test-size),size);
			size=0;
			tpq.q=atof(temp);
			break;
		}
		// break;
	}
return 1;

}

/*
int find_max(const vector<int,float> &seq)
{
	int j(0);
	float tmp=seq[0];
	for (int i=1;i<seq.size();i++)
	{
		if (seq[i])>tmp)
		{
			tmp=seq[i];
			j=i;
		}
	}	
	return j;
}
*/
int find_max(float *seq,int size)
{
	int j(0);
	float tmp_max=*seq;
	for (int i=1;i<size;i++)
	{
	   if (*(seq+i)>tmp_max)
		{
			tmp_max=*(seq+i);
			j=i;
		}	
	}
	return j;
}

int find_min (float *seq,int size )
{
        int j(0);
        float tmp_min=*seq;
        for (int i=1;i<size;i++)
        {
           if (*(seq+i)<tmp_min)
                {
                        tmp_min=*(seq+i);
                        j=i;
                }
        }
        return j;
}
